template <class C>
inline bool is_corner_10(const unsigned char* p,
                         const int w,
                         const int barrier) {
  const int w3 = 3 * w;
  const int t = C::prep_t(*p, barrier);
  if (!C::eval(p[-1 - w3], t)) {  // ???????????????-
    if (!C::eval(p[3 + w], t)) {  // ?????-?????????-
      return false;
    }                                 // ?????@?????????-
    if (!C::eval(p[2 + 2 * w], t)) {  // ?????@-????????-
      return false;
    }                               // ?????@@????????-
    if (!C::eval(p[-1 + w3], t)) {  // ?????@@??-?????-
      return false;
    }                              // ?????@@??@?????-
    if (!C::eval(p[1 + w3], t)) {  // ?????@@-?@?????-
      return false;
    }                          // ?????@@@?@?????-
    if (!C::eval(p[w3], t)) {  // ?????@@@-@?????-
      return false;
    }                                  // ?????@@@@@?????-
    if (!C::eval(p[-2 + 2 * w], t)) {  // ?????@@@@@-????-
      if (!C::eval(p[-w3], t)) {       // -????@@@@@-????-
        return false;
      }                         // @????@@@@@-????-
      if (!C::eval(p[3], t)) {  // @???-@@@@@-????-
        return false;
      }                              // @???@@@@@@-????-
      if (!C::eval(p[1 - w3], t)) {  // @-??@@@@@@-????-
        return false;
      }                                 // @@??@@@@@@-????-
      if (!C::eval(p[2 - 2 * w], t)) {  // @@-?@@@@@@-????-
        return false;
      }                             // @@@?@@@@@@-????-
      if (!C::eval(p[3 - w], t)) {  // @@@-@@@@@@-????-
        return false;
      }  // @@@@@@@@@@-????-
      return true;
    }                              // ?????@@@@@@????-
    if (!C::eval(p[-3 + w], t)) {  // ?????@@@@@@-???-
      if (!C::eval(p[3], t)) {     // ????-@@@@@@-???-
        return false;
      }                              // ????@@@@@@@-???-
      if (!C::eval(p[1 - w3], t)) {  // ?-??@@@@@@@-???-
        return false;
      }                                 // ?@??@@@@@@@-???-
      if (!C::eval(p[2 - 2 * w], t)) {  // ?@-?@@@@@@@-???-
        return false;
      }                             // ?@@?@@@@@@@-???-
      if (!C::eval(p[3 - w], t)) {  // ?@@-@@@@@@@-???-
        return false;
      }  // ?@@@@@@@@@@-???-
      return true;
    }                            // ?????@@@@@@@???-
    if (!C::eval(p[3], t)) {     // ????-@@@@@@@???-
      if (!C::eval(p[-3], t)) {  // ????-@@@@@@@-??-
        return false;
      }                              // ????-@@@@@@@@??-
      if (!C::eval(p[-3 - w], t)) {  // ????-@@@@@@@@-?-
        return false;
      }                                  // ????-@@@@@@@@@?-
      if (!C::eval(p[-2 - 2 * w], t)) {  // ????-@@@@@@@@@--
        return false;
      }  // ????-@@@@@@@@@@-
      return true;
    }                             // ????@@@@@@@@???-
    if (!C::eval(p[3 - w], t)) {  // ???-@@@@@@@@???-
      if (!C::eval(p[-3], t)) {   // ???-@@@@@@@@-??-
        return false;
      }                              // ???-@@@@@@@@@??-
      if (!C::eval(p[-3 - w], t)) {  // ???-@@@@@@@@@-?-
        return false;
      }  // ???-@@@@@@@@@@?-
      return true;
    }                                   // ???@@@@@@@@@???-
    if (!C::eval(p[-3], t)) {           // ???@@@@@@@@@-??-
      if (!C::eval(p[2 - 2 * w], t)) {  // ??-@@@@@@@@@-??-
        return false;
      }  // ??@@@@@@@@@@-??-
      return true;
    }  // ???@@@@@@@@@@??-
    return true;
  }                                  // ???????????????@
  if (!C::eval(p[-2 - 2 * w], t)) {  // ??????????????-@
    if (!C::eval(p[3], t)) {         // ????-?????????-@
      return false;
    }                             // ????@?????????-@
    if (!C::eval(p[3 + w], t)) {  // ????@-????????-@
      return false;
    }                          // ????@@????????-@
    if (!C::eval(p[w3], t)) {  // ????@@??-?????-@
      return false;
    }                              // ????@@??@?????-@
    if (!C::eval(p[1 + w3], t)) {  // ????@@?-@?????-@
      return false;
    }                                 // ????@@?@@?????-@
    if (!C::eval(p[2 + 2 * w], t)) {  // ????@@-@@?????-@
      return false;
    }                                 // ????@@@@@?????-@
    if (!C::eval(p[3 - w], t)) {      // ???-@@@@@?????-@
      if (!C::eval(p[-1 + w3], t)) {  // ???-@@@@@-????-@
        return false;
      }                              // ???-@@@@@@????-@
      if (!C::eval(p[-3 - w], t)) {  // ???-@@@@@@???--@
        return false;
      }                                  // ???-@@@@@@???@-@
      if (!C::eval(p[-2 + 2 * w], t)) {  // ???-@@@@@@-??@-@
        return false;
      }                              // ???-@@@@@@@??@-@
      if (!C::eval(p[-3 + w], t)) {  // ???-@@@@@@@-?@-@
        return false;
      }                          // ???-@@@@@@@@?@-@
      if (!C::eval(p[-3], t)) {  // ???-@@@@@@@@-@-@
        return false;
      }  // ???-@@@@@@@@@@-@
      return true;
    }                                 // ???@@@@@@?????-@
    if (!C::eval(p[2 - 2 * w], t)) {  // ??-@@@@@@?????-@
      if (!C::eval(p[-3], t)) {       // ??-@@@@@@???-?-@
        return false;
      }                               // ??-@@@@@@???@?-@
      if (!C::eval(p[-1 + w3], t)) {  // ??-@@@@@@-??@?-@
        return false;
      }                                  // ??-@@@@@@@??@?-@
      if (!C::eval(p[-2 + 2 * w], t)) {  // ??-@@@@@@@-?@?-@
        return false;
      }                              // ??-@@@@@@@@?@?-@
      if (!C::eval(p[-3 + w], t)) {  // ??-@@@@@@@@-@?-@
        return false;
      }  // ??-@@@@@@@@@@?-@
      return true;
    }                                 // ??@@@@@@@?????-@
    if (!C::eval(p[1 - w3], t)) {     // ?-@@@@@@@?????-@
      if (!C::eval(p[-1 + w3], t)) {  // ?-@@@@@@@-????-@
        return false;
      }                                  // ?-@@@@@@@@????-@
      if (!C::eval(p[-2 + 2 * w], t)) {  // ?-@@@@@@@@-???-@
        return false;
      }                              // ?-@@@@@@@@@???-@
      if (!C::eval(p[-3 + w], t)) {  // ?-@@@@@@@@@-??-@
        return false;
      }  // ?-@@@@@@@@@@??-@
      return true;
    }                                 // ?@@@@@@@@?????-@
    if (!C::eval(p[-w3], t)) {        // -@@@@@@@@?????-@
      if (!C::eval(p[-1 + w3], t)) {  // -@@@@@@@@-????-@
        return false;
      }                                  // -@@@@@@@@@????-@
      if (!C::eval(p[-2 + 2 * w], t)) {  // -@@@@@@@@@-???-@
        return false;
      }  // -@@@@@@@@@@???-@
      return true;
    }  // @@@@@@@@@?????-@
    return true;
  }                                // ??????????????@@
  if (!C::eval(p[-3 - w], t)) {    // ?????????????-@@
    if (!C::eval(p[1 + w3], t)) {  // ???????-?????-@@
      return false;
    }                             // ???????@?????-@@
    if (!C::eval(p[3 - w], t)) {  // ???-???@?????-@@
      return false;
    }                         // ???@???@?????-@@
    if (!C::eval(p[3], t)) {  // ???@-??@?????-@@
      return false;
    }                             // ???@@??@?????-@@
    if (!C::eval(p[3 + w], t)) {  // ???@@-?@?????-@@
      return false;
    }                                 // ???@@@?@?????-@@
    if (!C::eval(p[2 + 2 * w], t)) {  // ???@@@-@?????-@@
      return false;
    }                                 // ???@@@@@?????-@@
    if (!C::eval(p[2 - 2 * w], t)) {  // ??-@@@@@?????-@@
      if (!C::eval(p[w3], t)) {       // ??-@@@@@-????-@@
        return false;
      }                          // ??-@@@@@@????-@@
      if (!C::eval(p[-3], t)) {  // ??-@@@@@@???--@@
        return false;
      }                               // ??-@@@@@@???@-@@
      if (!C::eval(p[-1 + w3], t)) {  // ??-@@@@@@-??@-@@
        return false;
      }                                  // ??-@@@@@@@??@-@@
      if (!C::eval(p[-2 + 2 * w], t)) {  // ??-@@@@@@@-?@-@@
        return false;
      }                              // ??-@@@@@@@@?@-@@
      if (!C::eval(p[-3 + w], t)) {  // ??-@@@@@@@@-@-@@
        return false;
      }  // ??-@@@@@@@@@@-@@
      return true;
    }                                // ??@@@@@@?????-@@
    if (!C::eval(p[1 - w3], t)) {    // ?-@@@@@@?????-@@
      if (!C::eval(p[-3 + w], t)) {  // ?-@@@@@@???-?-@@
        return false;
      }                          // ?-@@@@@@???@?-@@
      if (!C::eval(p[w3], t)) {  // ?-@@@@@@-??@?-@@
        return false;
      }                               // ?-@@@@@@@??@?-@@
      if (!C::eval(p[-1 + w3], t)) {  // ?-@@@@@@@-?@?-@@
        return false;
      }                                  // ?-@@@@@@@@?@?-@@
      if (!C::eval(p[-2 + 2 * w], t)) {  // ?-@@@@@@@@-@?-@@
        return false;
      }  // ?-@@@@@@@@@@?-@@
      return true;
    }                            // ?@@@@@@@?????-@@
    if (!C::eval(p[-w3], t)) {   // -@@@@@@@?????-@@
      if (!C::eval(p[w3], t)) {  // -@@@@@@@-????-@@
        return false;
      }                               // -@@@@@@@@????-@@
      if (!C::eval(p[-1 + w3], t)) {  // -@@@@@@@@-???-@@
        return false;
      }                                  // -@@@@@@@@@???-@@
      if (!C::eval(p[-2 + 2 * w], t)) {  // -@@@@@@@@@-??-@@
        return false;
      }  // -@@@@@@@@@@??-@@
      return true;
    }  // @@@@@@@@?????-@@
    return true;
  }                                   // ?????????????@@@
  if (!C::eval(p[-w3], t)) {          // -????????????@@@
    if (!C::eval(p[2 + 2 * w], t)) {  // -?????-??????@@@
      return false;
    }                              // -?????@??????@@@
    if (!C::eval(p[1 + w3], t)) {  // -?????@-?????@@@
      return false;
    }                                  // -?????@@?????@@@
    if (!C::eval(p[-2 + 2 * w], t)) {  // -?????@@??-??@@@
      return false;
    }                          // -?????@@??@??@@@
    if (!C::eval(p[w3], t)) {  // -?????@@-?@??@@@
      return false;
    }                               // -?????@@@?@??@@@
    if (!C::eval(p[-1 + w3], t)) {  // -?????@@@-@??@@@
      return false;
    }                                // -?????@@@@@??@@@
    if (!C::eval(p[-3 + w], t)) {    // -?????@@@@@-?@@@
      if (!C::eval(p[1 - w3], t)) {  // --????@@@@@-?@@@
        return false;
      }                             // -@????@@@@@-?@@@
      if (!C::eval(p[3 + w], t)) {  // -@???-@@@@@-?@@@
        return false;
      }                                 // -@???@@@@@@-?@@@
      if (!C::eval(p[2 - 2 * w], t)) {  // -@-??@@@@@@-?@@@
        return false;
      }                             // -@@??@@@@@@-?@@@
      if (!C::eval(p[3 - w], t)) {  // -@@-?@@@@@@-?@@@
        return false;
      }                         // -@@@?@@@@@@-?@@@
      if (!C::eval(p[3], t)) {  // -@@@-@@@@@@-?@@@
        return false;
      }  // -@@@@@@@@@@-?@@@
      return true;
    }                               // -?????@@@@@@?@@@
    if (!C::eval(p[-3], t)) {       // -?????@@@@@@-@@@
      if (!C::eval(p[3 + w], t)) {  // -????-@@@@@@-@@@
        return false;
      }                                 // -????@@@@@@@-@@@
      if (!C::eval(p[2 - 2 * w], t)) {  // -?-??@@@@@@@-@@@
        return false;
      }                             // -?@??@@@@@@@-@@@
      if (!C::eval(p[3 - w], t)) {  // -?@-?@@@@@@@-@@@
        return false;
      }                         // -?@@?@@@@@@@-@@@
      if (!C::eval(p[3], t)) {  // -?@@-@@@@@@@-@@@
        return false;
      }  // -?@@@@@@@@@@-@@@
      return true;
    }  // -?????@@@@@@@@@@
    return true;
  }                                   // @????????????@@@
  if (!C::eval(p[-3], t)) {           // @???????????-@@@
    if (!C::eval(p[2 + 2 * w], t)) {  // @?????-?????-@@@
      return false;
    }                                 // @?????@?????-@@@
    if (!C::eval(p[2 - 2 * w], t)) {  // @?-???@?????-@@@
      return false;
    }                             // @?@???@?????-@@@
    if (!C::eval(p[3 - w], t)) {  // @?@-??@?????-@@@
      return false;
    }                             // @?@@??@?????-@@@
    if (!C::eval(p[3 + w], t)) {  // @?@@?-@?????-@@@
      return false;
    }                         // @?@@?@@?????-@@@
    if (!C::eval(p[3], t)) {  // @?@@-@@?????-@@@
      return false;
    }                                // @?@@@@@?????-@@@
    if (!C::eval(p[1 - w3], t)) {    // @-@@@@@?????-@@@
      if (!C::eval(p[1 + w3], t)) {  // @-@@@@@-????-@@@
        return false;
      }                              // @-@@@@@@????-@@@
      if (!C::eval(p[-3 + w], t)) {  // @-@@@@@@???--@@@
        return false;
      }                          // @-@@@@@@???@-@@@
      if (!C::eval(p[w3], t)) {  // @-@@@@@@-??@-@@@
        return false;
      }                               // @-@@@@@@@??@-@@@
      if (!C::eval(p[-1 + w3], t)) {  // @-@@@@@@@-?@-@@@
        return false;
      }                                  // @-@@@@@@@@?@-@@@
      if (!C::eval(p[-2 + 2 * w], t)) {  // @-@@@@@@@@-@-@@@
        return false;
      }  // @-@@@@@@@@@@-@@@
      return true;
    }  // @@@@@@@?????-@@@
    return true;
  }                                // @???????????@@@@
  if (!C::eval(p[1 - w3], t)) {    // @-??????????@@@@
    if (!C::eval(p[1 + w3], t)) {  // @-?????-????@@@@
      return false;
    }                              // @-?????@????@@@@
    if (!C::eval(p[-3 + w], t)) {  // @-?????@???-@@@@
      return false;
    }                          // @-?????@???@@@@@
    if (!C::eval(p[w3], t)) {  // @-?????@-??@@@@@
      return false;
    }                               // @-?????@@??@@@@@
    if (!C::eval(p[-1 + w3], t)) {  // @-?????@@-?@@@@@
      return false;
    }                                  // @-?????@@@?@@@@@
    if (!C::eval(p[-2 + 2 * w], t)) {  // @-?????@@@-@@@@@
      return false;
    }  // @-?????@@@@@@@@@
    return true;
  }                                 // @@??????????@@@@
  if (!C::eval(p[2 - 2 * w], t)) {  // @@-?????????@@@@
    if (!C::eval(p[-3 + w], t)) {   // @@-????????-@@@@
      return false;
    }                          // @@-????????@@@@@
    if (!C::eval(p[w3], t)) {  // @@-?????-??@@@@@
      return false;
    }                               // @@-?????@??@@@@@
    if (!C::eval(p[-1 + w3], t)) {  // @@-?????@-?@@@@@
      return false;
    }                                  // @@-?????@@?@@@@@
    if (!C::eval(p[-2 + 2 * w], t)) {  // @@-?????@@-@@@@@
      return false;
    }  // @@-?????@@@@@@@@
    return true;
  }                               // @@@?????????@@@@
  if (!C::eval(p[-3 + w], t)) {   // @@@????????-@@@@
    if (!C::eval(p[3 - w], t)) {  // @@@-???????-@@@@
      return false;
    }                         // @@@@???????-@@@@
    if (!C::eval(p[3], t)) {  // @@@@-??????-@@@@
      return false;
    }                             // @@@@@??????-@@@@
    if (!C::eval(p[3 + w], t)) {  // @@@@@-?????-@@@@
      return false;
    }  // @@@@@@?????-@@@@
    return true;
  }                                  // @@@????????@@@@@
  if (!C::eval(p[-2 + 2 * w], t)) {  // @@@???????-@@@@@
    if (!C::eval(p[3 - w], t)) {     // @@@-??????-@@@@@
      return false;
    }                         // @@@@??????-@@@@@
    if (!C::eval(p[3], t)) {  // @@@@-?????-@@@@@
      return false;
    }  // @@@@@?????-@@@@@
    return true;
  }                                 // @@@???????@@@@@@
  if (!C::eval(p[3 - w], t)) {      // @@@-??????@@@@@@
    if (!C::eval(p[-1 + w3], t)) {  // @@@-?????-@@@@@@
      return false;
    }  // @@@-?????@@@@@@@
    return true;
  }  // @@@@??????@@@@@@
  return true;
}
